#include "Arduino.h"
#include <ESP8266WiFi.h>
#include <WiFiUDP.h>
#include "SPISlave.h"
 
// 设置wifi接入信息(请根据您的WiFi信息进行修改)
const char* ssid = "iQOO Neo7 Racing";
const char* password = "123456";
const char* STAip = "192.168.105.149";

WiFiUDP Udp;

uint8_t LCDH,LCDW;
uint8_t RxSideFlag = 0;
size_t RxHeadState = 0;
uint8_t sbuf[25000];
size_t RxCounter = 0;

// 复位或上电后运行一次:
void setup() {
  //Serial.setRxBufferSize(20000);
  //Serial.begin(2000000);
  Serial.begin(9600);
  Serial.setDebugOutput(true);  
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {      // WiFi.status()函数的返回值是由NodeMCU的WiFi连接状态所决定的。 
    delay(1000);                               // 如果WiFi连接成功则返回值为WL_CONNECTED                       
  }
  // Serial.setRxBufferSize(10000);
  // Serial.begin(2000000);
  pinMode(4, OUTPUT);
  digitalWrite(4, HIGH);
  SPISlave.onData([](uint8_t * data, size_t len) {
    // String message = String((char *)data);
    // Serial.printf("%s\n", message);
    // SPISlave.setData("0");
    digitalWrite(4, HIGH);
    if(RxHeadState==1)
    {
      memcpy((sbuf+RxCounter), data, 32);
      RxCounter=RxCounter+32;
      if(RxCounter>=(LCDH*LCDW+RxSideFlag*2*LCDH))
      {
        Udp.beginPacket(STAip, 8080);//只需对此处进行修改，需要发送的ip及端口
        Udp.write(0x00);
        Udp.write(0xff);
        Udp.write(0x01);
        Udp.write(0x01);
        Udp.endPacket();
        for(size_t i=0;i<(LCDH*LCDW+RxSideFlag*2*LCDH);i=i+1440)
        {
          if((LCDH*LCDW+RxSideFlag*2*LCDH)-i>=1440)
          {
            Udp.beginPacket(STAip, 8080);//只需对此处进行修改，需要发送的ip及端口
            Udp.write(sbuf+i,1440);
            Udp.endPacket();
          }
          else
          {
            Udp.beginPacket(STAip, 8080);//只需对此处进行修改，需要发送的ip及端口
            Udp.write(sbuf+i,(LCDH*LCDW+RxSideFlag*2*LCDH)-i);
            Udp.endPacket();
          }
        }
        Udp.beginPacket(STAip, 8080);//只需对此处进行修改，需要发送的ip及端口
        Udp.write(0x01);
        Udp.write(0x01);
        Udp.write(0xff);
        Udp.write(0x00);
        Udp.endPacket();
        RxHeadState=0;
        RxCounter=0;
      }
    }
    if(RxHeadState==0&&data[0]==0x00&&data[1]==0xff&&data[2]==0x01&&data[3]==0x01)
    {
      LCDH=data[4];
      LCDW=data[5];
      RxSideFlag=data[6];
      RxHeadState=1;
    }
    digitalWrite(4, LOW);
    // Udp.beginPacket(STAip, 8080);//只需对此处进行修改，需要发送的ip及端口
    // Udp.write(data, len);
    // Udp.endPacket();
  });

  SPISlave.begin();
}
 
void loop() {

}